﻿// ***********************************************************************
// Assembly         : Delta_entidad
// Author           : Juan Alberto Cerino Gomez
// Created          : 02-18-2013
//
// Last Modified By : Juan Alberto Cerino Gomez
// Last Modified On : 06-03-2013
// ***********************************************************************
// <copyright file="Cat_tipo_columna.cs" company="Delta Bussines">
//     Copyright (c) 2013  Delta Bussines. All rights reserved.
// </copyright>
// <summary></summary>
// ***********************************************************************
using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using Delta_entidad.Base;
using Delta_util.Estaticos;
using Delta_entidad.Atributos;
namespace Delta_entidad.EntidadesControl
{

    /// <summary>
    /// Entidad que representa la configuración de los tipos de columnas, estos tipos de columnas son usados por los campos dinámicos.
    /// </summary>
    [Serializable]
    [AttEntidad("DG_Cat_tipo_columna", "id_tipo_columna", false, 0, true, true, Enumerados.TIPO_OPERACION_GRID.INSERTAR, Enumerados.TIPO_OPERACION_GRID.ACTUALIZAR, Enumerados.TIPO_OPERACION_GRID.ELIMINAR)]
    public class Cat_tipo_columna : TipoBase, ITipo
    {
        /// <summary>
        /// Constructor de la clase.
        /// </summary>
        public Cat_tipo_columna() {
            base.EsEntidadControl = true;
        }

        /// <summary>
        /// Variable que indica la clave del tipo de columna.
        /// </summary>
        private Int16 _id_tipo_columna;
        /// <summary>
        /// Variable que indica el nombre de la propiedad a usar como valor en un control web DropDownList.
        /// </summary>
        private string _campo_valor;
        /// <summary>
        /// Variable que indica el nombre de la propiedad a usar como texto en un control web DropDownList.
        /// </summary>
        private string _campo_texto;
        /// <summary>
        /// Variable que indica el nombre completo del tipo de dato al cual se convierte el valor del campo cuando se obtiene de la base de datos.
        /// </summary>
        private string _tipo_codigo;
        /// <summary>
        /// Variable que indica el nombre del tipo de dato de la columna en la base de datos.
        /// </summary>
        private string _tipo_bd;
        /// <summary>
        /// Variable que indica la cadena que se usa para realizar la validación REGEX.
        /// </summary>
        private string _regex_validacion;
        /// <summary>
        /// Variable que indica el nombre del estilo CSS que se quiere asignar al editor.
        /// </summary>
        private string _estilo;
        /// <summary>
        /// Variable que indica la fuente de datos del control web, se recomienda usar solo cuando el tipo de editor es una lista.
        /// </summary>
        private string _data_source;
        /// <summary>
        /// Variable que indica si la lista es fija.
        /// </summary>
        private bool _listado_fijo;
        /// <summary>
        /// Variable que indica la clave del tipo de editor.
        /// </summary>
        private int _id_editor;
        /// <summary>
        /// Variable que indica el texto que se muestra cuando la validación REGEX devuelve "false".
        /// </summary>
        private string _texto_regex;
        /// <summary>
        /// Variable que indica el nombre del tipo de columna.
        /// </summary>
        private string _nombre_tipo;
        /// <summary>
        /// Variable que indica el nombre del editor que se usa para el tipo de columna.
        /// </summary>
        private string _nombre_editor;
        /// <summary>
        /// Variable que indica los parametros enviados al metodo que se ejecuta al obtener los datos, esta propiedad se usa solo cuando la lista no es fija.
        /// </summary>
        private string _parametros;


        /// <summary>
        /// Obtiene o establece el valor de la clave del tipo de columna.
        /// </summary>
        /// <value>Clave del tipo de columna.</value>
        [AttrParametro(System.Data.SqlDbType.SmallInt, 4, null, System.Data.ParameterDirection.InputOutput, Enumerados.TIPO_QUERY.INSERTAR, Enumerados.TIPO_QUERY.ELIMINAR, Enumerados.TIPO_QUERY.OBTENER, Enumerados.TIPO_QUERY.OBTENER_TODOS)]
        [AttPropiedad("Clave", true, false, false, false, Enumerados.TIPO_EDITOR.TEXBOX, null, 1)]
        public Int16 id_tipo_columna
        {
            get { return _id_tipo_columna; }
            set { _id_tipo_columna = value; }
        }

        /// <summary>
        /// Obtiene o establece el nombre del tipo de columna.
        /// </summary>
        /// <value>Nombre del tipo.</value>
        [AttrParametro(System.Data.SqlDbType.VarChar, 100, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Nombre", true, false, false, true, Enumerados.TIPO_EDITOR.TEXBOX, null, 2)]
        public string nombre_tipo
        {
            get { return _nombre_tipo; }
            set { _nombre_tipo = value; }
        }


        /// <summary>
        /// Obtiene o establece el nombre completo del tipo de dato al cual se convierte el valor del campo cuando se obtiene de la base de datos.
        /// </summary>
        /// <value>Nombre completo del tipo de dato.</value>
        [AttrParametro(System.Data.SqlDbType.VarChar, 100, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Tipo de Dato", true, false, false, true, Enumerados.TIPO_EDITOR.TEXBOX, "Tipo de dato al cual se convertira en la entidad", 3)]
        public string tipo_codigo
        {
            get { return _tipo_codigo; }
            set { _tipo_codigo = value; }
        }
        /// <summary>
        /// Obtiene o establece el nombre del tipo de dato de la columna en la base de datos.
        /// </summary>
        /// <value>Nombre del tipo de columna.</value>
        [AttrParametro(System.Data.SqlDbType.VarChar, 100, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Tipo de Dato BD", true, false, false, true, Enumerados.TIPO_EDITOR.TEXBOX, "Tipo de dato que se convertirá el campo en la vista de la tabla", 4)]
        public string tipo_bd
        {
            get { return _tipo_bd; }
            set { _tipo_bd = value; }
        }
        /// <summary>
        /// Obtiene o establece la cadena que se usa para realizar la validación REGEX.
        /// </summary>
        /// <value>Cadena REGEX de validación.</value>
        [AttrParametro(System.Data.SqlDbType.VarChar, 100, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Validación Regex", true, false, false, true, Enumerados.TIPO_EDITOR.TEXTBOX_MULTILINEA, "Validación regex del campo", 5)]
        public string regex_validacion
        {
            get { return _regex_validacion; }
            set { _regex_validacion = value; }
        }

        /// <summary>
        /// Obtiene o establece el texto que se muestra cuando la validación REGEX devuelve "false".
        /// </summary>
        /// <value>Texto que se muestra al usuario cuando falla la validación REGEX.</value>
        [AttrParametro(System.Data.SqlDbType.VarChar, 100, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Texto Validación", true, false, false, true, Enumerados.TIPO_EDITOR.TEXBOX, "Puede hacer referencia al titulo del campo colocando {0}.",6)]
        public string texto_regex
        {
            get { return _texto_regex; }
            set { _texto_regex = value; }
        }

        /// <summary>
        /// Obtiene o establece el nombre del estilo CSS que se quiere asingar al control web.
        /// </summary>
        /// <value>Nombre del estilo CSS.</value>
        [AttrParametro(System.Data.SqlDbType.VarChar, 20, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Estilo", true, false, false, true, Enumerados.TIPO_EDITOR.TEXBOX, "Estilo Css del control, dejar en blanco para usar el estilo de Delta Grid Editor", 7)]
        public string estilo
        {
            get { return _estilo; }
            set { _estilo = value; }
        }
        /// <summary>
        /// Obtiene o establece el nombre del metodo el cual se va a ejecutar para obtener los datos para rellenar la lista.
        /// <br />Si el metodo no devuelve directamente los datos, puede especificar la propiedad que contiene el resultado, por ejemplo "ObtenerListado|Lista". 
        /// <br/>Si el metodo devuelve los datos, entonces no es necesario especificar la propiedad, por ejemplo "ObtenerListado".
        /// <br/>Si la lista es fija, entonces los valores para la lista se especifica de la siguiente manera: Opcion1|10,Opcion2|20,.....        
        /// </summary>
        /// <value>La fuente de datos.</value>
        [AttrParametro(System.Data.SqlDbType.VarChar, 1000, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("DataSource (Lista)", true, false, false, true, Enumerados.TIPO_EDITOR.TEXTBOX_MULTILINEA,"Si es lista fija escriba:(texto1|valor,texto2,.....), si no escribir (Dll|FullNameClase[=[DllTipo-]TiposGenericos,....]|NombreMetodo[|PropiedadListado]) ",8)]
        public string data_source
        {
            get { return _data_source; }
            set { _data_source = value; }
        }
        /// <summary>
        /// Obtiene o establece el valor que indica si la lista es fija.
        /// </summary>
        /// <value>Valor lógico.</value>
        [AttrParametro(System.Data.SqlDbType.Bit, 4, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Lista Fija", true, false, false, true, Enumerados.TIPO_EDITOR.CHECK, "Una lista fija es aquella que contiene un rango de valores, por ejemplo, los meses, edo. civil, entreo otro", 9)]
        public bool listado_fijo
        {
            get { return _listado_fijo; }
            set { _listado_fijo = value; }
        }
        /// <summary>
        /// Obtiene o establece el nombre de la propiedad a usar como valor en un control web DropDownList.
        /// </summary>
        /// <value>Nombre de la propiedad.</value>
        [AttrParametro(System.Data.SqlDbType.VarChar, 100, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Campo Valor(Lista)", true, false, false, true, Enumerados.TIPO_EDITOR.TEXBOX, "Nombre del campo de la entidad la cual se va a tomar como valor,(Cuando la lista es fija no es necesario indicar el campo)", 11)]
        public string campo_valor
        {
            get { return _campo_valor; }
            set { _campo_valor = value; }
        }
        /// <summary>
        /// Obtiene o establece los parametros enviados al metodo que se ejecuta al obtener los datos, esta propiedad se usa solo cuando la lista no es fija.
        /// </summary>
        /// <value>Parametros.</value>
        [AttrParametro(System.Data.SqlDbType.VarChar, 100, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Parametros(Lista)", true, false, false, true, Enumerados.TIPO_EDITOR.TEXBOX, "Parametros para rellenar la lista, debe separarlo por coma(,)",10)]
        public string parametros
        {
            get { return _parametros; }
            set { _parametros = value; }
        }

        /// <summary>
        /// Obtiene o establece el nombre de la propiedad a usar como valor en un control web DropDownList.
        /// </summary>
        /// <value>Nombre de la propiedad.</value>
        [AttrParametro(System.Data.SqlDbType.VarChar, 100, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Campo Texto(Lista)", true, false, false, true, Enumerados.TIPO_EDITOR.TEXBOX, "Nombre del campo de la entidad la cual se va a mostrar en la lista,(Cuando la lista es fija no es necesario indicar el campo)", 12)]
        public string campo_texto
        {
            get { return _campo_texto; }
            set { _campo_texto = value; }
        }
        /// <summary>
        /// Obtiene o establece la clave del tipo de editor configurado para este tipo.
        /// </summary>
        /// <value>Clave del editor.</value>
        [AttrParametro(System.Data.SqlDbType.SmallInt, 4, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Tipo Editor", false, false, false, true, Enumerados.TIPO_EDITOR.LISTA, null, "Delta_control", "Delta_control.Base.ControlBase`1=Delta_entidad.EntidadesControl.Cat_editor", "ObtenerListado|Lista", "id_editor", "nombre", null, null, false, 13)]
        public int id_editor
        {
            get { return _id_editor; }
            set { _id_editor = value; }
        }

        /// <summary>
        /// Obtiene o establece el nombre del tipo de editor configurado para este tipo.
        /// </summary>
        /// <value>Nombre del editor.</value>
        [AttPropiedad("Tipo Editor", true, true, false, false, Enumerados.TIPO_EDITOR.TEXBOX, null, 14)]
        [AttEditor(null, null, null, "Delta_webControl", "Delta_webControl.Templates.LinkTemplateTEdit", null, null)]
        public string nombre_editor
        {
            get { return _nombre_editor; }
            set { _nombre_editor = value; }
        }
       
        


    }
}